/*
 * Copyright 2009 Andrey Khalzov, and individual contributors as indicated by the @author tag.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 */

package org.wannatrak.test.client;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SocketChannel;

/**
 * Created 13.12.2009 17:16:42
 *
 * @author Andrey Khalzov
 */
public class TcpClient implements Client {

    private final InetSocketAddress inetSocketAddress;
    private int bufferSize;

    public TcpClient(String host, int port, int bufferSize) {
        this.inetSocketAddress = new InetSocketAddress(host, port);
        this.bufferSize = bufferSize;
    }

    @Override
    public byte[] send(byte[] bytes) throws IOException {
        SocketChannel socketChannel = null;
        try {
            socketChannel = SocketChannel.open();
            socketChannel.socket().connect(inetSocketAddress);

            socketChannel.write(ByteBuffer.wrap(bytes));

            final ByteBuffer byteBuffer = ByteBuffer.allocate(bufferSize);
            socketChannel.read(byteBuffer);
            return byteBuffer.array();
        } finally {
            if (socketChannel != null) {
                socketChannel.close();
            }
        }
    }
}
